/**
 *  @Package: com.yidu.drug.service.impl
 *  @author: Administrator
 *  @date: 2018年8月14日 下午8:08:31
 */
package com.yidu.drug.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import com.yidu.drug.common.Page;
import com.yidu.drug.common.Tools;
import com.yidu.drug.dao.DrugModuleModelMapper;
import com.yidu.drug.model.DrugModuleModel;
import com.yidu.drug.model.DrugRoleModuleModel;
import com.yidu.drug.model.TreeNode;
import com.yidu.drug.service.DrugModuleService;


/**
 * 类的描述 实现模块Service接口
 * @author 祝浪
 * @date 2018年8月14日
 */
@Service
public class DrugModuleServiceImpl implements DrugModuleService {
	@Resource
	DrugModuleModelMapper modDao;
	

	@Override
	public void delete(String id) {
		modDao.deleteByPrimaryKey(id);
	}

	@Override
	public void saveOrUpdate(DrugModuleModel po) {
		
		if(!Tools.isEmpty(po.getModId())){
			
			modDao.updateByPrimaryKeySelective(po);
		}else{
			String id = Tools.getRandomUUID();
			po.setModId(id);
			modDao.insertSelective(po);
		}
		
	}

	@Override
	public List<DrugModuleModel> findAll(DrugModuleModel po, Page page) {
		
		List<DrugModuleModel> modVoList = new ArrayList<DrugModuleModel>();
		for (DrugModuleModel ehyModuleEntity : modDao.findAll(po, page)) {
			
			if(!Tools.isEmpty(ehyModuleEntity.getEhyModId())){
				if(modDao.selectByPrimaryKey(ehyModuleEntity.getEhyModId())!=null){
					ehyModuleEntity.setModulePName(modDao.selectByPrimaryKey(ehyModuleEntity.getEhyModId()).getModName());
				}
			}
			if(ehyModuleEntity.getIsva()==0){
				ehyModuleEntity.setIsvas("有效权限");
			}else{
				ehyModuleEntity.setIsvas("无效权限");
			}
			ehyModuleEntity.setOptimes(Tools.SDF_TIME.format(ehyModuleEntity.getOptime()));
			modVoList.add(ehyModuleEntity);
		}
		return modVoList;
	}

	@Override
	public int findTotalRows(DrugModuleModel vo) {
		DrugModuleModel po = new DrugModuleModel();
		if(vo != null) {
			BeanUtils.copyProperties(vo, po);
			po.setEhyModId(vo.getModId());
			po.setModName(vo.getModName());
		}
		return modDao.findTotalRows(po);
	}

	@Override
	public DrugModuleModel findById(String id) {
		DrugModuleModel po = modDao.selectByPrimaryKey(id);
		DrugModuleModel vo = new DrugModuleModel();
		if(po != null) {
			BeanUtils.copyProperties(po, vo);
			vo.setModId(po.getModId());
			vo.setModName(po.getModName());
		}
		return vo;
	}

	@Override
	public List<DrugModuleModel> findAllByGroup() {
		List<DrugModuleModel> modVoList = new ArrayList<DrugModuleModel>();
		for (DrugModuleModel ehyModuleEntity : modDao.findByPid("main")) {
			DrugModuleModel modVo = new DrugModuleModel();
			BeanUtils.copyProperties(ehyModuleEntity, modVo);
			modVo.setModId(ehyModuleEntity.getModId());
			modVo.setModName(ehyModuleEntity.getModName());
			modVoList.add(modVo);
		}
		List<DrugModuleModel> modAll = getTypes(modVoList);
		return modAll;
	}

	/**
	 * 递归查询类型的子类型
	 * 
	 * @param types
	 * @return
	 */
	public List<DrugModuleModel> getTypes(List<DrugModuleModel> mods) {
		// 循环遍历传入的集合
		for (DrugModuleModel mod : mods) {
			// 取到类型的父ID
			String pid = mod.getModId();
			// 根据类型的父ID查询类型集合
			List<DrugModuleModel> modc = new ArrayList<DrugModuleModel>();
			for (DrugModuleModel ehyModuleEntity : modDao.findByPid(pid)) {
				DrugModuleModel modVo = new DrugModuleModel();
				BeanUtils.copyProperties(ehyModuleEntity, modVo);
				modVo.setModId(ehyModuleEntity.getModId());
				modVo.setModName(ehyModuleEntity.getModName());
				modc.add(modVo);
			}
			// 给类型对象设置子级
			mod.setChildren(modc);
			//如果类型集合大小大于0则将自己的子级作为参数 调用自己
			if (modc.size() > 0) {
				getTypes(modc);
			}
		}
		// 返回参数
		return mods;
	}
	
	@Override
	public List<TreeNode> findAllModule(String pid) {
		List<TreeNode> listTree=new ArrayList<TreeNode>();
		List<DrugModuleModel> list=modDao.findByPid(pid);
		if(!list.isEmpty()){
			for(DrugModuleModel module:list){
				if(Tools.isEmpty(module.getModCode())){
					TreeNode tn = new TreeNode();
					tn.setValue(module.getModId());
					tn.setTitle(module.getModName());
					if(module.getIsva()==0){
						tn.setDisabled(false);
					}else{
						tn.setDisabled(true);
					}
					tn.setData(findAllModule(module.getModId())); //将本级的ID作为下级的父ID传入进行查询
					listTree.add(tn);//将节点加入到集合中
				}
			}
		}
		
		return listTree;
	}

	@Override
	public List<TreeNode> findAllModule(String pid, List<DrugRoleModuleModel> list) {
		List<TreeNode> listTree=new ArrayList<TreeNode>();
		List<DrugModuleModel> lists=modDao.findByPid(pid);
		if(!lists.isEmpty()){
			for(DrugModuleModel module:lists){
				if(Tools.isEmpty(module.getModCode())){
					TreeNode tn = new TreeNode();
					tn.setValue(module.getModId());
					tn.setTitle(module.getModName());
					for(DrugRoleModuleModel erm:list){
						if(erm.getModId().equals(module.getModId())){
							tn.setChecked(true);
						}
					}
					if(module.getIsva()==0){
						tn.setDisabled(false);
					}else{
						tn.setDisabled(true);
					}
					
					tn.setData(findAllModule(module.getModId(),list)); //将本级的ID作为下级的父ID传入进行查询
					listTree.add(tn);//将节点加入到集合中
				}
				
			}
		}
		return listTree;
	}
}
